package com.jprocms.module.cms.dal.mysql.investigateitemop;

import com.jpro.framework.common.pojo.PageResult;
import com.jpro.framework.mybatis.core.mapper.BaseMapperX;
import com.jpro.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.jprocms.module.cms.controller.admin.investigateitemop.vo.InvestigateItemOpListReqVO;
import com.jprocms.module.cms.controller.admin.investigateitemop.vo.InvestigateItemOpPageReqVO;
import com.jprocms.module.cms.dal.dataobject.investigateitemop.InvestigateItemOpDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.lang.Nullable;

import java.util.List;

/**
 * 调查问卷条目意见 Mapper
 *
 * @author jprocms
 */
@Mapper
public interface InvestigateItemOpMapper extends BaseMapperX<InvestigateItemOpDO> {

    /**
     * 根据主键获取数据
     *
     * @param id 主键ID
     * @return 实体对象。没有找到数据，则返回 {@code null}
     */
    @Nullable
    InvestigateItemOpDO select(@Param("id") Long id);

    /**
     * 根据调查问卷条目ID列表删除数据
     *
     * @param itemIds 调查问卷条目ID列表
     * @return 被删除的数据条数
     */
    int deleteByItemIds(@Param("itemIds") List<Long> itemIds);

    /**
     * 根据调查意见ID删除数据
     *
     * @param opinionId 调查意见ID
     * @return 被删除的数据条数
     */
    int deleteByOpinionId(@Param("opinionId") Long opinionId);

    /**
     * 根据调查问卷ID删除数据
     *
     * @param investigateId 调查问卷ID
     * @param itemIds       不包含的调查问卷条目id列表
     * @return 被删除的数据条数
     */
    int deleteByInvestigateId(@Param("investigateId") Long investigateId, @Param("itemIds") List<Long> itemIds);

    /**
     * 根据用户ID删除数据
     *
     * @param userId 用户ID
     * @return 被删除的数据条数
     */
    int deleteByUserId(@Param("userId") Long userId);

    /**
     * 根据站点ID删除数据
     *
     * @param siteId 站点ID
     * @return 被删除的数据条数
     */
    int deleteBySiteId(@Param("siteId") Long siteId);

    default PageResult<InvestigateItemOpDO> selectPage(InvestigateItemOpPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<InvestigateItemOpDO>()
                .eqIfPresent(InvestigateItemOpDO::getInvestigateItemId, reqVO.getInvestigateItemId())
                .eqIfPresent(InvestigateItemOpDO::getInvestigateOpinionId, reqVO.getInvestigateOpinionId())
                .eqIfPresent(InvestigateItemOpDO::getInvestigateId, reqVO.getInvestigateId())
                .eqIfPresent(InvestigateItemOpDO::getItemAnswer, reqVO.getItemAnswer())
                .betweenIfPresent(InvestigateItemOpDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(InvestigateItemOpDO::getId));
    }

    default List<InvestigateItemOpDO> selectList(InvestigateItemOpListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<InvestigateItemOpDO>()
                .eqIfPresent(InvestigateItemOpDO::getInvestigateItemId, reqVO.getInvestigateItemId())
                .eqIfPresent(InvestigateItemOpDO::getInvestigateOpinionId, reqVO.getInvestigateOpinionId())
                .eqIfPresent(InvestigateItemOpDO::getInvestigateId, reqVO.getInvestigateId())
                .eqIfPresent(InvestigateItemOpDO::getItemAnswer, reqVO.getItemAnswer())
                .betweenIfPresent(InvestigateItemOpDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(InvestigateItemOpDO::getId));
    }

}
